home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 626-637 / disk_633 / galer / source / galer.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  24KB  |  790 lines

  1. /****************************************************************/
  2. /*                                */
  3. /* GAL-Software                            */
  4. /*                                */
  5. /* Soft- and Hardware  copyright (c)1991            */
  6. /*     by Christian Habermann                    */
  7. /*        Asamstr. 17                        */
  8. /*        W-8050 Freising (Germany)                */
  9. /*                                */
  10. /* Dies ist Version 1.3 der GALer-Software.            */
  11. /*                                */
  12. /* History:                            */
  13. /*    V1.0:   Testversion                    */
  14. /*    V1.1:   Intuition-Umgebung hinzugefügt            */
  15. /*    V1.2:   einige Fehler beseitigt                */
  16. /*    V1.3:   Fehler im GAL-Assembler beseitigt        */
  17. /*                                */
  18. /*                                */
  19. /* Compiler:    Aztec 3.6a                    */
  20. /*                                */
  21. /* compilieren: cc GALer.c                    */
  22. /*        cc sub.c                    */
  23. /*        cc jedec.c                    */
  24. /*        cc pruefer.c                    */
  25. /*        cc GAL.c                    */
  26. /*        cc GALasm.c                    */
  27. /*        as -n -c -d port.asm                */
  28. /* linken     : ln GALer sub port jedec pruefer GAL GALasm -lc  */
  29. /*                                */
  30. /****************************************************************/
  31.  
  32. #include "devices/parallel.h"
  33. #include "exec/io.h"
  34. #include "exec/memory.h"
  35. #include "exec/ports.h"
  36. #include "exec/types.h"
  37. #include "intuition/intuition.h"
  38. #include "libraries/dosextens.h"
  39. #include <functions.h>
  40.  
  41. #include "GALer.h"
  42.  
  43.  
  44.  
  45. #define        Menu_1        0
  46. #define        Menu_2        1
  47. #define        Menu_3        2
  48. #define        Menu_4        3
  49. #define        Menu_5        4
  50. #define        Menu_6        5
  51.  
  52. #define        Item_1        0
  53. #define        Item_2        1
  54. #define        Item_3        2
  55. #define        Item_4        3
  56. #define        Item_5        4
  57. #define        Item_6        5
  58.  
  59.  
  60.  
  61. struct IORequest    *CreateExtIO();
  62. struct IntuitionBase    *IntuitionBase;
  63. struct GfxBase        *GfxBase;
  64. struct IntuiMessage    *message;
  65. struct Screen        *screen;
  66. struct Window        *window,*old_ReqWin;
  67. struct MsgPort        *timeport, *parport;
  68. struct timerequest    *timereq;
  69. struct IOExtPar        *parreq;
  70.  
  71.  
  72.  
  73.  
  74. UWORD    MyColors[4]={0x000,0x777,0x999,0x00A};
  75.  
  76.  
  77. SHORT  vector2[10] = {30,160,610,160,610,195,30,195,30,160};
  78. SHORT  vector1[10] = {0,11,639,11,639,255,0,255,0,11};
  79.  
  80. struct Border    border2 = {0,0,2,3,JAM1,5,(SHORT *)vector2,NULL};
  81. struct Border    border1 = {0,0,2,3,JAM1,5,(SHORT *)vector1,&border2};
  82.  
  83.  
  84.  
  85. struct IntuiText MIText1a={0,1,JAM1,0,0,NULL,
  86.                (UBYTE *)"Pinnamen zeigen",NULL};
  87.  
  88. struct IntuiText MIText1b={0,1,JAM1,0,0,NULL,
  89.                (UBYTE *)"Pinnamen löschen",NULL};
  90.  
  91. struct IntuiText MIText1c={0,1,JAM1,0,0,NULL,
  92.                (UBYTE *)"Prüfmuster",NULL};
  93.  
  94. struct IntuiText MIText3= {0,1,JAM1,0,0,NULL,
  95.                   (UBYTE *)"Jedec-Datei erstellen",NULL};
  96.  
  97. struct IntuiText MIText4b={0,1,JAM1,0,0,NULL,
  98.                (UBYTE *)"ACW lesen",NULL};
  99.  
  100. struct IntuiText MIText4= {0,1,JAM1,0,0,NULL,
  101.                (UBYTE *)"Signatur lesen",NULL};
  102.  
  103. struct IntuiText MIText5= {0,1,JAM1,0,0,NULL,
  104.                (UBYTE *)"Datei assemblieren",NULL};
  105.  
  106. struct IntuiText MIText6b={0,1,JAM1,20,0,NULL,
  107.                (UBYTE *)"Pin-Belegung",NULL};
  108.  
  109. struct IntuiText MIText6a={0,1,JAM1,20,0,NULL,
  110.                (UBYTE *)"Chip-Diagramm",NULL};
  111.  
  112. struct IntuiText MIText6= {0,1,JAM1,20,0,NULL,
  113.                (UBYTE *)"Fuse-Matrix",NULL};
  114.  
  115. struct IntuiText MIText7= {0,1,JAM1,20,0,NULL,
  116.                (UBYTE *)"Jedec-Datei",NULL};
  117.  
  118. struct IntuiText MIText8= {0,1,JAM1,0,0,NULL,
  119.                (UBYTE *)"setze Security-Bit",NULL};
  120.  
  121. struct IntuiText MIText9= {0,1,JAM1,0,0,NULL,
  122.                (UBYTE *)"Leertest",NULL};
  123.  
  124. struct IntuiText MIText10={0,1,JAM1,0,0,NULL,
  125.                (UBYTE *)"kopieren",NULL};
  126.  
  127. struct IntuiText MIText11={0,1,JAM1,0,0,NULL,
  128.                (UBYTE *)"programmieren",NULL};
  129.  
  130. struct IntuiText MIText12={0,1,JAM1,0,0,NULL,
  131.                (UBYTE *)"löschen",NULL};
  132.  
  133. struct IntuiText MIText13={0,1,JAM1,20,0,NULL,
  134.                (UBYTE *)"GAL20V8",NULL};
  135.  
  136. struct IntuiText MIText14={0,1,JAM1,20,0,NULL,
  137.                (UBYTE *)"GAL16V8",NULL};
  138.  
  139. struct IntuiText MIText15={0,1,JAM1,0,0,NULL,
  140.                  (UBYTE *)"Quit",NULL};
  141.  
  142. struct IntuiText MITextP ={0,1,JAM1,0,0,NULL,
  143.                  (UBYTE *)"Prüfer verlassen",NULL};
  144.  
  145.  
  146.  
  147. struct MenuItem MenuItem1c= {NULL,0,20,180,8,
  148.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  149.                  0,(APTR)&MIText1c,NULL,'m',NULL,MENUNULL};
  150.  
  151. struct MenuItem MenuItem1b= {&MenuItem1c,0,10,180,8,
  152.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  153.                  0,(APTR)&MIText1b,NULL,'c',NULL,MENUNULL};
  154.  
  155. struct MenuItem MenuItem1a= {&MenuItem1b,0,0,180,8,
  156.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  157.                  0,(APTR)&MIText1a,NULL,'n',NULL,MENUNULL};
  158.  
  159. struct MenuItem MenuItem3 = {NULL,0,20,224,8,
  160.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  161.                  0,(APTR)&MIText3,NULL,'j',NULL,MENUNULL};
  162.  
  163. struct MenuItem MenuItem2b= {&MenuItem3,0,10,224,8,
  164.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  165.                  0,(APTR)&MIText4b,NULL,'w',NULL,MENUNULL};
  166.  
  167. struct MenuItem MenuItem2 = {&MenuItem2b,0,0,224,8,
  168.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  169.                  0,(APTR)&MIText4,NULL,'r',NULL,MENUNULL};
  170.  
  171. struct MenuItem MenuItem7 = {NULL,0,40,200,8,
  172.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  173.                  0,(APTR)&MIText5,NULL,'a',NULL,MENUNULL};
  174.  
  175. struct MenuItem MenuItem6b= {&MenuItem7,0,30,200,8,
  176.                  CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED,
  177.                  0,(APTR)&MIText6b,NULL,NULL,NULL,MENUNULL};
  178.  
  179. struct MenuItem MenuItem6a= {&MenuItem6b,0,20,200,8,
  180.                  CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED,
  181.                  0,(APTR)&MIText6a,NULL,NULL,NULL,MENUNULL};
  182.  
  183. struct MenuItem MenuItem6 = {&MenuItem6a,0,10,200,8,
  184.                  CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED,
  185.                  0,(APTR)&MIText6,NULL,NULL,NULL,MENUNULL};
  186.  
  187. struct MenuItem MenuItem5 = {&MenuItem6,0,0,200,8,
  188.                  CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED,
  189.                  0,(APTR)&MIText7,NULL,NULL,NULL,MENUNULL};
  190.  
  191. struct MenuItem MenuItem12 = {NULL,0,40,182,8,
  192.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  193.                   0,(APTR)&MIText8,NULL,'s',NULL,MENUNULL};
  194.  
  195. struct MenuItem MenuItem11 = {&MenuItem12,0,30,182,8,
  196.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  197.                   0,(APTR)&MIText9,NULL,'t',NULL,MENUNULL};
  198.  
  199. struct MenuItem MenuItem10 = {&MenuItem11,0,20,182,8,
  200.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  201.                   0,(APTR)&MIText10,NULL,'k',NULL,MENUNULL};
  202.  
  203. struct MenuItem MenuItem9 = {&MenuItem10,0,10,182,8,
  204.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  205.                  0,(APTR)&MIText11,NULL,'p',NULL,MENUNULL};
  206.  
  207. struct MenuItem MenuItem8 = {&MenuItem9,0,0,182,8,
  208.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  209.                  0,(APTR)&MIText12,NULL,'l',NULL,MENUNULL};
  210.  
  211. struct MenuItem MenuItem14 = {NULL,0,10,120,8,
  212.                   CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  213.                   0xFFFD,(APTR)&MIText13,NULL,'2',NULL,MENUNULL};
  214.  
  215. struct MenuItem MenuItem13 = {&MenuItem14,0,0,120,8,
  216.                   CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP+CHECKED,
  217.                   0xFFFE,(APTR)&MIText14,NULL,'1',NULL,MENUNULL};
  218.  
  219. struct MenuItem MenuItem15 = {NULL,0,0,84,8,
  220.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  221.                   0,(APTR)&MIText15,NULL,'q',NULL,MENUNULL};
  222.  
  223.  
  224.  
  225. struct Menu Menu6 = {NULL,438,0,87,0,MENUENABLED,
  226.              "GAL-Prüfer",&MenuItem1a};
  227.  
  228. struct Menu Menu5 = {&Menu6,296,0,135,0,MENUENABLED,
  229.              "GAL-Disassembler",&MenuItem2};
  230.  
  231. struct Menu Menu4 = {&Menu5,178,0,111,0,MENUENABLED,
  232.              "GAL-Assembler",&MenuItem5};
  233.  
  234. struct Menu Menu3 = {&Menu4,140,0,31,0,MENUENABLED,
  235.              "GAL",&MenuItem8};
  236.  
  237. struct Menu Menu2 = {&Menu3,70,0,63,0,MENUENABLED,
  238.              "GAL-Typ",&MenuItem13};
  239.  
  240. struct Menu Menu1 = {&Menu2,0,0,63,0,MENUENABLED,
  241.              "Projekt",&MenuItem15};
  242.  
  243.  
  244.  
  245. struct MenuItem MenuItemP = {NULL,0,0,175,8,
  246.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  247.                   0,(APTR)&MITextP,NULL,'x',NULL,MENUNULL};
  248.  
  249. struct Menu MenuP = {NULL,0,0,87,0,MENUENABLED,
  250.              "GAL-Prüfer",&MenuItemP};
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259. SHORT  BorderVectors1[]  = {0,0,17,0,17,9,0,9,0,0};
  260. struct Border    Border1 = {-1,-1,2,3,JAM1,5,BorderVectors1,NULL};
  261. struct Border    Border2 = {-1,-1,3,3,JAM1,5,BorderVectors1,NULL};
  262.  
  263. struct IntuiText IText35 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  264. struct Gadget    Gadget35= {NULL,382,120,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  265.                 (APTR)&Border2,NULL,&IText35,NULL,NULL,15,NULL};
  266. struct IntuiText IText34 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL};
  267. struct Gadget    Gadget34= {&Gadget35,340,120,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  268.                 (APTR)&Border1,NULL,&IText34,NULL,NULL,30,NULL};
  269. struct IntuiText IText33 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  270. struct Gadget    Gadget33= {&Gadget34,382,110,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  271.                 (APTR)&Border2,NULL,&IText33,NULL,NULL,16,NULL};
  272. struct IntuiText IText32 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL};
  273. struct Gadget    Gadget32= {&Gadget33,340,110,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  274.                 (APTR)&Border1,NULL,&IText32,NULL,NULL,31,NULL};
  275. struct IntuiText IText31 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  276. struct Gadget    Gadget31= {&Gadget32,382,100,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  277.                 (APTR)&Border2,NULL,&IText31,NULL,NULL,17,NULL};
  278. struct IntuiText IText30 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL};
  279. struct Gadget    Gadget30= {&Gadget31,340,100,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  280.                 (APTR)&Border1,NULL,&IText30,NULL,NULL,32,NULL};
  281. struct IntuiText IText29 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  282. struct Gadget    Gadget29= {&Gadget30,382,90,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  283.                 (APTR)&Border2,NULL,&IText29,NULL,NULL,18,NULL};
  284. struct IntuiText IText28 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL};
  285. struct Gadget    Gadget28= {&Gadget29,340,90,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  286.                 (APTR)&Border1,NULL,&IText28,NULL,NULL,33,NULL};
  287. struct IntuiText IText27 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  288. struct Gadget    Gadget27= {&Gadget28,382,80,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  289.                 (APTR)&Border2,NULL,&IText27,NULL,NULL,19,NULL};
  290. struct IntuiText IText26 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL};
  291. struct Gadget    Gadget26= {&Gadget27,340,80,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  292.                 (APTR)&Border1,NULL,&IText26,NULL,NULL,34,NULL};
  293. struct IntuiText IText25 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  294. struct Gadget    Gadget25= {&Gadget26,382,70,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  295.                 (APTR)&Border2,NULL,&IText25,NULL,NULL,20,NULL};
  296. struct IntuiText IText24 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL};
  297. struct Gadget    Gadget24= {&Gadget25,340,70,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  298.                 (APTR)&Border1,NULL,&IText24,NULL,NULL,35,NULL};
  299. struct IntuiText IText23 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  300. struct Gadget    Gadget23= {&Gadget24,382,60,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  301.                 (APTR)&Border2,NULL,&IText23,NULL,NULL,21,NULL};
  302. struct IntuiText IText22 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL};
  303. struct Gadget    Gadget22= {&Gadget23,340,60,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  304.                 (APTR)&Border1,NULL,&IText22,NULL,NULL,36,NULL};
  305. struct IntuiText IText21 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  306. struct Gadget    Gadget21= {&Gadget22,382,50,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  307.                 (APTR)&Border2,NULL,&IText21,NULL,NULL,22,NULL};
  308. struct IntuiText IText20 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL};
  309. struct Gadget    Gadget20= {&Gadget21,340,50,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  310.                 (APTR)&Border1,NULL,&IText20,NULL,NULL,37,NULL};
  311.  
  312. struct IntuiText IText13 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  313. struct Gadget    Gadget13= {&Gadget20,382,130,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  314.                 (APTR)&Border1,NULL,&IText13,NULL,NULL,10,NULL};
  315. struct IntuiText IText12 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  316. struct Gadget    Gadget12= {&Gadget13,242,120,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  317.                 (APTR)&Border1,NULL,&IText12,NULL,NULL,9,NULL};
  318. struct IntuiText IText11 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  319. struct Gadget    Gadget11= {&Gadget12,242,110,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  320.                 (APTR)&Border1,NULL,&IText11,NULL,NULL,8,NULL};
  321. struct IntuiText IText10 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  322. struct Gadget    Gadget10= {&Gadget11,242,100,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  323.                 (APTR)&Border1,NULL,&IText10,NULL,NULL,7,NULL};
  324. struct IntuiText IText9  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  325. struct Gadget    Gadget9 = {&Gadget10,242,90,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  326.                 (APTR)&Border1,NULL,&IText9,NULL,NULL,6,NULL};
  327. struct IntuiText IText8  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  328. struct Gadget    Gadget8 = {&Gadget9,242,80,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  329.                 (APTR)&Border1,NULL,&IText8,NULL,NULL,5,NULL};
  330. struct IntuiText IText7  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  331. struct Gadget    Gadget7 = {&Gadget8,242,70,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  332.                 (APTR)&Border1,NULL,&IText7,NULL,NULL,4,NULL};
  333. struct IntuiText IText6  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  334. struct Gadget    Gadget6 = {&Gadget7,242,60,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  335.                 (APTR)&Border1,NULL,&IText6,NULL,NULL,3,NULL};
  336. struct IntuiText IText5  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  337. struct Gadget    Gadget5 = {&Gadget6,242,50,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  338.                 (APTR)&Border1,NULL,&IText5,NULL,NULL,2,NULL};
  339. struct IntuiText IText4  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  340. struct Gadget    Gadget4 = {&Gadget5,242,40,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  341.                 (APTR)&Border1,NULL,&IText4,NULL,NULL,1,NULL};
  342.  
  343. struct IntuiText IText1c = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  344. struct Gadget    Gadget1c= {NULL,382,120,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  345.                 (APTR)&Border1,NULL,&IText1c,NULL,NULL,14,NULL};
  346. struct IntuiText IText3  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  347. struct Gadget    Gadget3 = {&Gadget1c,242,30,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  348.                 (APTR)&Border1,NULL,&IText3,NULL,NULL,13,NULL};
  349. struct IntuiText IText2  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  350. struct Gadget    Gadget2 = {&Gadget3,382,30,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  351.                 (APTR)&Border1,NULL,&IText2,NULL,NULL,12,NULL};
  352. struct IntuiText IText1  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  353. struct Gadget    Gadget1 = {&Gadget2,242,20,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  354.                 (APTR)&Border1,NULL,&IText1,NULL,NULL,11,NULL};
  355.  
  356.  
  357. USHORT im_GAL20Dat[] = {
  358.     0x0FF8,0x03E0,0x7F80,0x3F00,0xFC1F,0x87E3,0xF000,0x3FFE,
  359.     0x07F0,0x7F80,0xFFC3,0xFF1F,0x87EF,0xFC00,0x7C1F,0x07F0,
  360.     0x1E01,0xFFE7,0xCF8F,0x03DF,0xFE00,0xF80F,0x8FF8,0x1E01,
  361.     0xE3E7,0x878F,0x03DF,0x3E00,0xF000,0x0F78,0x1E00,0x03E7,
  362.     0x878F,0x03DF,0x3E00,0xF000,0x1E3C,0x1E00,0x03E7,0x878F,
  363.     0x03DF,0x3E00,0xF000,0x1E3C,0x1E00,0x03E7,0x8F8F,0x87DF,
  364.     0x3E00,0xF000,0x3C1E,0x1E00,0x03E7,0x9F8F,0x87DF,0xFE00,
  365.     0xF03F,0xBC1E,0x1E00,0x03E7,0xBF87,0xCF8F,0xFC00,0xF03F,
  366.     0xFC1F,0x1E00,0x07C7,0xF787,0xCF87,0xF800,0xF00F,0x7FFF,
  367.     0x1E00,0x0F87,0xE783,0xFF0F,0xFC00,0xF00F,0x7FFF,0x1E00,
  368.     0x1F07,0xC783,0xFF1F,0x3E00,0xF00F,0x780F,0x1E00,0x3E07,
  369.     0x8781,0xFE1F,0x3E00,0xF80F,0x780F,0x1E00,0x7C07,0x8781,
  370.     0xFE1F,0x3E00,0xFC1F,0x780F,0x1E00,0xF867,0x8780,0xFC1F,
  371.     0x3E00,0x7E3E,0x780F,0x1E0F,0xF1E7,0xCF80,0xFC1F,0xFE00,
  372.     0x3FFC,0xFC3F,0xFFFF,0xFFE3,0xFF00,0x780F,0xFC00,0x0FF0,
  373.     0xFC3F,0xFFFF,0xFFE0,0xFC00,0x7803,0xF000
  374. };
  375.  
  376.  
  377. USHORT im_GAL16Dat[] = {
  378.     0x0FF8,0x03E0,0x7F80,0x1F00,0x3E1F,0x87E3,0xF000,0x3FFE,
  379.     0x07F0,0x7F80,0x3F00,0xFF1F,0x87EF,0xFC00,0x7C1F,0x07F0,
  380.     0x1E01,0xFF01,0xF80F,0x03DF,0xFE00,0xF80F,0x8FF8,0x1E01,
  381.     0xFF03,0xE00F,0x03DF,0x3E00,0xF000,0x0F78,0x1E00,0x1F07,
  382.     0xC00F,0x03DF,0x3E00,0xF000,0x1E3C,0x1E00,0x1F07,0xC00F,
  383.     0x03DF,0x3E00,0xF000,0x1E3C,0x1E00,0x1F07,0xC00F,0x87DF,
  384.     0x3E00,0xF000,0x3C1E,0x1E00,0x1F07,0xC00F,0x87DF,0xFE00,
  385.     0xF03F,0xBC1E,0x1E00,0x1F07,0xFC07,0xCF8F,0xFC00,0xF03F,
  386.     0xFC1F,0x1E00,0x1F07,0xFF07,0xCF87,0xF800,0xF00F,0x7FFF,
  387.     0x1E00,0x1F07,0xFF83,0xFF0F,0xFC00,0xF00F,0x7FFF,0x1E00,
  388.     0x1F07,0xCF83,0xFF1F,0x3E00,0xF00F,0x780F,0x1E00,0x1F07,
  389.     0xCF81,0xFE1F,0x3E00,0xF80F,0x780F,0x1E00,0x1F07,0xCF81,
  390.     0xFE1F,0x3E00,0xFC1F,0x780F,0x1E00,0x1F07,0xCF80,0xFC1F,
  391.     0x3E00,0x7E3E,0x780F,0x1E0F,0x1F07,0xFF80,0xFC1F,0xFE00,
  392.     0x3FFC,0xFC3F,0xFFFF,0xFFE3,0xFF00,0x780F,0xFC00,0x0FF0,
  393.     0xFC3F,0xFFFF,0xFFE0,0xFC00,0x7803,0xF000
  394. };
  395.  
  396. struct Image im_GAL16 = { 0, 0, 103, 18, 1,
  397.               NULL, 0x0001, 0x0000, NULL };
  398.  
  399. struct Image im_GAL20 = { 0, 0, 103, 18, 1,
  400.               NULL, 0x0001, 0x0000, NULL };
  401.  
  402.  
  403.  
  404.  
  405. struct NewScreen MyScreen={ 0,0,640,256,2,2,3,HIRES,CUSTOMSCREEN,NULL,
  406.                 (UBYTE *)"GALer V1.3  (c)1991 by Christian Habermann",
  407.                 NULL,NULL} ;
  408.  
  409. struct NewWindow MyWindow={ 0,11,640,245,1,2,
  410.                 GADGETUP|MENUPICK|REQCLEAR,
  411.                 ACTIVATE|BORDERLESS,
  412.                 NULL,NULL,NULL,NULL,NULL,0,0,0,0,CUSTOMSCREEN };
  413.  
  414.  
  415. struct    Process        *myproc;
  416.  
  417. struct    RastPort    *rp;
  418. struct    ViewPort    *vp;
  419.  
  420. int    pruef_mode =    0;
  421. int    GenJedec = YES, GenFuse = YES, GenChip = YES, GenPin = YES;
  422.  
  423. USHORT    *im_ptr16, *im_ptr20;
  424.  
  425. extern     int        GALType, MaxFuseAdr, SigAdr;
  426.  
  427.  
  428.  
  429. main()
  430. {
  431. ULONG    class;
  432. USHORT    code,    gadID;
  433. struct    Gadget    *gad;
  434.  
  435.  
  436.  OpenStuff();                    /* Libs, Windows... öffnen*/
  437.  
  438.  
  439.  CopyMem(&im_GAL16Dat[0], im_ptr16, (long)sizeof(im_GAL16Dat));
  440.  CopyMem(&im_GAL20Dat[0], im_ptr20, (long)sizeof(im_GAL20Dat));
  441.  
  442.  im_GAL16.ImageData = im_ptr16;
  443.  im_GAL20.ImageData = im_ptr20;
  444.  
  445.  rp=&(screen->RastPort);
  446.  vp=&screen->ViewPort;
  447.  
  448.  LoadRGB4(vp,&MyColors,4L);
  449.  DrawBorder(rp,&border1,0L,0L);            /*Umrandungen,... zeichnen*/
  450.  SetAPen(rp,2L);
  451.  Move(rp,0L,199L); Draw(rp,639L,199L);
  452.  SetAPen(rp,1L);
  453.  DrawImage(rp, &im_GAL16, 35L, 35L);
  454.  DrawGAL(GAL16V8);                /*IC zeichnen*/
  455.  
  456.  
  457.  if(GetParPort()!=0) {                /*Druckerport frei?*/
  458.     puts("Parallel-Port ist belegt");
  459.     CloseStuff();
  460.     exit(1L);
  461.    }
  462.  if(GetTimer()!=0) {                /*Timer holen*/
  463.     FreeParPort();
  464.     puts("kann Timer nicht finden");
  465.     CloseStuff;
  466.     exit(1L);    
  467.    }
  468.  
  469.  
  470.  
  471.  InitGALer();                    /*Ausgänge von IC3,4,5 auf*/
  472.  EnableOutput();                /*LOW schalten*/
  473.  SetGAL(GAL16V8);
  474.  MaxFuseAdr = MAX_FUSE_ADR16;
  475.  SigAdr     = SIG_ADR16;
  476.  
  477.  
  478.  for(;;)
  479.   {
  480.    Wait(1L<<window->UserPort->mp_SigBit);
  481.    if(message=(struct IntuiMessage *)GetMsg(window->UserPort))
  482.     {
  483.      class=message->Class;
  484.      code =message->Code;
  485.      if (class==GADGETUP) {
  486.        gad=(struct Gadget *)message->IAddress;
  487.        gadID=gad->GadgetID; }
  488.      ReplyMsg(message);
  489.  
  490.      switch(class)
  491.       {
  492.     case MENUPICK:    { if (MENUNUM(code)!=MENUNULL)
  493.                 ExecuteMenu(MENUNUM(code),ITEMNUM(code));      
  494.               break; }
  495.     case GADGETUP:    { if ((gadID<100)&(pruef_mode==ON))
  496.                 Pruefer(gad,gadID);
  497.               break; }
  498.       }
  499.     }
  500.   }
  501.  
  502. }     /*end of main*/
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  510. /*                Subroutinen                */
  511. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  512.  
  513.  
  514. /*aufgerufenes Menü ausführen*/
  515. ExecuteMenu(menu,item)
  516. int menu,item;
  517. {
  518.  if (pruef_mode==ON) {
  519.    if ((menu==Menu_1)&(item==Item_1)) TogglePruefer();
  520.   }
  521.  else {
  522.   switch (menu) {
  523.      case Menu_1: {                    /*Projekt*/
  524.        if (item == Item_1) {
  525.      CloseStuff();
  526.      FreeTimer();
  527.      FreeParPort();
  528.      exit(0L);
  529.     }
  530.        break;
  531.       }
  532.      case Menu_2: {                    /*GAL-Typ*/
  533.        if ((item == Item_1) && (GALType != GAL16V8)) {
  534.      MaxFuseAdr = MAX_FUSE_ADR16;
  535.      SigAdr     = SIG_ADR16;
  536.      SetGAL  (GAL16V8);
  537.      DrawImage(rp, &im_GAL16, 35L, 35L);
  538.      DrawGAL (GAL16V8);
  539.     }
  540.        if ((item == Item_2) && (GALType != GAL20V8)) {
  541.      MaxFuseAdr = MAX_FUSE_ADR20;
  542.      SigAdr     = SIG_ADR20;
  543.      SetGAL  (GAL20V8);
  544.      DrawImage(rp, &im_GAL20, 35L, 35L);
  545.      DrawGAL (GAL20V8);
  546.         }
  547.        break;
  548.       }
  549.      case Menu_3: {                    /*GAL*/
  550.        switch (item) {
  551.      case Item_1: {
  552.        Loeschen();
  553.        break;
  554.       }
  555.      case Item_2: {
  556.        ProgramGAL();
  557.        break;
  558.       }
  559.      case Item_3: {
  560.        CopyGAL();
  561.        break;
  562.       }
  563.      case Item_4: {
  564.        Leertest();
  565.        break;
  566.       }
  567.      case Item_5: {
  568.        SetSecurity();
  569.        break;
  570.       }
  571.         }
  572.        break;
  573.       }
  574.      case Menu_4: {                    /*GAL-Assembler*/
  575.        switch (item) {
  576.      case Item_1: {
  577.        if (GenJedec==YES) GenJedec=NO;    /*Jedec-Datei erstellen*/
  578.        else GenJedec=YES;
  579.        break;
  580.       }
  581.      case Item_2: {
  582.        if (GenFuse==YES) GenFuse=NO;    /*Fuse-Matrix erstellen*/
  583.        else GenFuse=YES;
  584.        break;
  585.       }
  586.      case Item_3: {
  587.        if (GenChip==YES) GenChip=NO;    /*Chip-Diagramm erstellen*/
  588.        else GenChip=YES;
  589.        break;
  590.       }
  591.      case Item_4: {
  592.        if (GenPin==YES) GenPin=NO;        /*Pin-Belegung erstellen*/
  593.        else GenPin=YES;
  594.        break;
  595.       }
  596.      case Item_5: {
  597.        AssembleInputFile();            /*Eingabe-Datei assemblieren*/
  598.        break;
  599.       }
  600.         }
  601.        break;
  602.       }
  603.      case Menu_5: {                    /*GAL-Disassembler*/
  604.        switch (item) {
  605.      case Item_1: {
  606.        PrintSignature();
  607.        break;
  608.       }
  609.      case Item_2: {
  610.        PrintACW();
  611.        break;
  612.       }
  613.      case Item_3: {
  614.        PutJedec();
  615.        break;
  616.       }
  617.     }
  618.        break;
  619.       }
  620.      case Menu_6: {                    /*GAL-Prüfer*/
  621.        switch (item) {
  622.      case Item_1: {
  623.        PrintPinNames();
  624.        break;
  625.       }
  626.      case Item_2: {
  627.        ClearPinNames();
  628.        break;
  629.       }
  630.      case Item_3: {
  631.        TogglePruefer();
  632.        break;
  633.       }
  634.     }
  635.       }
  636.     }
  637.   }   
  638. }
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647. GetParPort()                /*Druckerport belegen*/
  648. {
  649.  int error;
  650.  
  651.  parport=CreatePort(0L,0L);
  652.  if(parport==0)
  653.     return(-1);
  654.  parreq=(struct IOExtPar *) CreateExtIO(parport,(long)sizeof(struct IOExtPar));
  655.  if(parreq==0) {
  656.     DeletePort(parport);
  657.     return(-2);
  658.    }
  659.  
  660.  error=OpenDevice((UBYTE *)"parallel.device",0L,parreq,0L);
  661.  if(error!=0) {
  662.     DeleteExtIO(parreq,(long)sizeof(struct IOExtPar));
  663.     DeletePort(parport);
  664.     return(-3);
  665.    }
  666.  return(error);
  667. }
  668.  
  669.  
  670. FreeParPort()                /*Druckerport wieder freigeben*/
  671. {
  672.  CloseDevice(parreq);
  673.  DeleteExtIO(parreq,(long)sizeof(struct IOExtPar));
  674.  DeletePort(parport);
  675. }
  676.  
  677.  
  678.  
  679. GetTimer()                /*Timer holen*/
  680. {
  681.  int error;
  682.  
  683.  timeport=CreatePort(0L,0L);
  684.  if(timeport==0)
  685.     return(-1);
  686.  timereq=(struct timerequest *)AllocMem(
  687.             (long)sizeof(struct timerequest),MEMF_PUBLIC);
  688.  if(timereq==0) {
  689.     DeletePort(timeport);
  690.     return(-2);
  691.    }
  692.  
  693.  timereq->tr_node.io_Message.mn_Node.ln_Type=NT_MESSAGE;
  694.  timereq->tr_node.io_Message.mn_Node.ln_Pri=0;
  695.  timereq->tr_node.io_Message.mn_ReplyPort=timeport;
  696.  error=OpenDevice(TIMERNAME,UNIT_MICROHZ,timereq,0L);
  697.  if(error!=0) {
  698.     FreeMem(&timereq,(long)sizeof(struct timerequest));
  699.     DeletePort(timeport);
  700.     return(-3);
  701.    }
  702.  
  703.  return(error);
  704. }
  705.  
  706.  
  707. FreeTimer()                /*Timer wieder freigeben*/
  708. {
  709.  CloseDevice(timereq);
  710.  FreeMem(timereq,(long)sizeof(struct timerequest));
  711.  DeletePort(timeport);
  712. }
  713.  
  714.  
  715. /*micro: microsec. to wait
  716.   secs: seconds to wait
  717. */
  718. WaitForTimer(secs,micro)
  719. ULONG secs,micro;
  720. {
  721.  timereq->tr_node.io_Command=TR_ADDREQUEST;
  722.  timereq->tr_time.tv_secs=secs;
  723.  timereq->tr_time.tv_micro=micro;
  724.  DoIO(timereq);
  725. }
  726.  
  727.  
  728.  
  729.  
  730. OpenStuff()
  731. {
  732.    IntuitionBase = 0;
  733.    GfxBase     = 0;
  734.    screen     = 0;
  735.    window     = 0;
  736.    im_ptr16     = 0;
  737.    im_ptr20     = 0;
  738.  
  739.    if((IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0L))==NULL)
  740.      exit(FALSE);
  741.  
  742.    if((GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0L))==NULL) {
  743.      CloseStuff();
  744.      exit(FALSE);
  745.     }
  746.    if(!(screen=(struct Screen *)OpenScreen(&MyScreen))) {
  747.      CloseStuff();
  748.      exit(FALSE);
  749.     }
  750.  
  751.    MyWindow.Screen=screen;
  752.    if((window=(struct Window *)OpenWindow(&MyWindow))==NULL) {
  753.      CloseStuff();
  754.      exit(FALSE);
  755.     }
  756.    SetMenuStrip(window,&Menu1);
  757.                         /*Speicher für Images holen*/
  758.    if (!(im_ptr16 = AllocMem((long)sizeof(im_GAL16Dat),MEMF_CHIP))) {
  759.      puts("nicht genug freies Chip-Memory");
  760.      CloseStuff();
  761.      exit(1L);
  762.     }
  763.    if (!(im_ptr20 = AllocMem((long)sizeof(im_GAL20Dat),MEMF_CHIP))) {
  764.      puts("nicht genug freies Chip-Memory");
  765.      CloseStuff();
  766.      exit(1L);
  767.     }
  768.  
  769.    myproc=(struct Process *)FindTask(0L);        /*Requester umleiten*/
  770.    old_ReqWin=(struct Window *)myproc->pr_WindowPtr;
  771.    myproc->pr_WindowPtr=(APTR)window;
  772. }
  773.  
  774.  
  775. CloseStuff()
  776. {
  777.   myproc->pr_WindowPtr=(APTR)old_ReqWin;        /*Req. auf ursprüngliches Window*/
  778.   if(window) {
  779.     ClearMenuStrip(window);
  780.     CloseWindow(window);
  781.    }
  782.   if(screen) CloseScreen(screen);
  783.   if(IntuitionBase) CloseLibrary (IntuitionBase);
  784.   if(GfxBase) CloseLibrary (GfxBase);
  785.   if(im_ptr16) FreeMem(im_ptr16, (long)sizeof(im_GAL16Dat));
  786.   if(im_ptr20) FreeMem(im_ptr20, (long)sizeof(im_GAL20Dat));
  787. }
  788.  
  789.  
  790.